<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="main" script:language="StarBasic" script:moduleType="normal">REM  *****  BASIC  *****
sub run_py_from_shell(oDoc, sScript$, sFunction_name$)
	Dim oScript
	Dim scriptPro As Object
	Dim sScript_string$
	
	sScript_string = &quot;vnd.sun.star.script:&quot; &amp; sScript &amp; &quot;$&quot; &amp; sFunction_name &amp; &quot;?language=Python&amp;location=user&quot;

	scriptPro = oDoc.getScriptProvider()
	oScript = scriptPro.getScript(sScript_string)

	oScript.invoke(Array(oDoc), Array(), Array() )
End Sub

&apos; run from command line
Sub run_ucs_convert_py(cFile)
&apos;BasicLibraries.loadLibrary(&quot;XrayTool&quot;)	
	Dim oDoc
	Dim extName$
	dim cURL
	Dim oVal(0) As New com.sun.star.beans.PropertyValue
	oVal(0).Name = &quot;Hidden&quot;
	oVal(0).Value = True

	cURL = ConvertToURL( cFile ) &apos; get URL 
	&apos; Hidden run
	oDoc = StarDesktop.loadComponentFromURL(cURL, &quot;_blank&quot;, 0, oVal())
	
	&apos;run_py_from_shell(oDoc, &quot;onik.py&quot;, &quot;ucs_convert_from_shell&quot;)

	&apos; TODO: Зафиксировать имя расширения без версий (инф-я о версии - в самом расширении).
	&apos; Тогда не нужно будет вычислять имя расширения, а также можно один раз назначить хоткеи.
	&apos;extName = getExtName(&quot;OOnik&quot;)
	extName = &quot;OOnik.oxt&quot;
	
	run_ext_py(oDoc, extName,  &quot;py|onik.py&quot;, &quot;ucs_convert_from_shell&quot;, True)
	
	oDoc.Store 			&apos; save changes
	oDoc.close( True )	&apos; exit
	
End Sub


sub run_ext_py(oDoc, sExtName, sScriptPath$, sFunction_name$, Optional bShell)
	&apos; Запуск py-функции из py-модуля ВНУТРИ расширения
	&apos; Теперь не требуется наличие модуля в Scripts/python
	&apos; sExtName - имя расширения: напр. OOnik-L-1.1.15.oxt
	&apos; sScriptPath - каталог внутри расширения вместо / - | 
	&apos; напр.: &quot;py|onik.py&quot;
	&apos; bShell - флаг [True|False*] .  
	&apos; True - для запуска py-скрипта с передачей в него параметра (oDoc)   
	&apos; False - для запуска py-скрипта с неявной передачей XSCRIPTCONTEXT
	
	Dim oScript 
	Dim scriptPro As Object
	Dim sScript_string$
	Dim Param as Object
	If IsMissing(bShell) Then bShell = False

	sScript_string = &quot;vnd.sun.star.script:&quot; &amp; _
		sExtName &amp; _
		&quot;|&quot; &amp; _
		sScriptPath &amp; _
		&quot;$&quot; &amp; _
		sFunction_name &amp; _
		&quot;?language=Python&amp;location=user:uno_packages&quot;

	scriptPro = oDoc.getScriptProvider()
	oScript = scriptPro.getScript(sScript_string)
	
	Param = Array() &apos; Office run
	if bShell = True Then
		Param = Array(oDoc) &apos; shell run
	endIf 
	&apos; run script
	oScript.invoke(Param, Array(), Array() )
End Sub

Function getExtName(libName$) as String
	&apos; возвращает имя расширения для библиотеки внутри расширения
	&apos; это позволяет получить доступ к функциям py-модулей 
	&apos; который находятся не в Scripts/python,
	&apos; а в самом расширении 	
	Dim extName$: extName = &quot;&quot;
	Dim origName$
	with BasicLibraries
		if .hasByName(libName) = True then
			origName = .getOriginalLibraryLinkURL(libName)
			extName = Split(origName, &quot;/&quot;)(3)
		endif
	end with
	getExtName = extName
End Function
</script:module>